One-to-One, One-to-Many, এবং Many-to-Many Mapping এর জন্য @OneToOne, @OneToMany, @ManyToMany অ্যানোটেশন ব্যবহার

Java Technologies - স্প্রিং বুট ওআরএম (Spring Boot ORM) - Entity Relationships (One-to-One, One-to-Many, Many-to-Many)
177

স্প্রিং বুট ORM (Hibernate/JPA) ব্যবহার করে ডেটাবেসের টেবিলের মধ্যে সম্পর্ক (Relationship) তৈরি করা যায়। JPA অ্যানোটেশন যেমন @OneToOne, @OneToMany, এবং @ManyToMany ব্যবহার করে এই সম্পর্কগুলি সহজেই সংজ্ঞায়িত করা যায়।


One-to-One Mapping

একটি টেবিলের একটি রেকর্ড অন্য একটি টেবিলের কেবল একটি রেকর্ডের সাথে সম্পর্কিত থাকে।
উদাহরণ: একজন ব্যবহারকারীর শুধুমাত্র একটি প্রোফাইল থাকতে পারে।

@OneToOne অ্যানোটেশন ব্যবহারের ধাপ:

Entity ক্লাস উদাহরণ:

import jakarta.persistence.*;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "profile_id", referencedColumnName = "id")
    private Profile profile;

    // Getters and Setters
}

@Entity
public class Profile {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String bio;

    // Getters and Setters
}

বুঝিয়ে বলি:

  • @OneToOne: User এবং Profile টেবিলের মধ্যে এক থেকে এক সম্পর্ক স্থাপন করে।
  • @JoinColumn: User টেবিলের profile_id কলামটিকে Profile টেবিলের id কলামের সাথে ম্যাপ করে।

One-to-Many Mapping

একটি টেবিলের একটি রেকর্ড অন্য একটি টেবিলের একাধিক রেকর্ডের সাথে সম্পর্কিত থাকে।
উদাহরণ: একটি ক্যাটাগরিতে একাধিক পণ্য থাকতে পারে।

@OneToMany অ্যানোটেশন ব্যবহারের ধাপ:

Entity ক্লাস উদাহরণ:

import jakarta.persistence.*;
import java.util.List;

@Entity
public class Category {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @OneToMany(mappedBy = "category", cascade = CascadeType.ALL)
    private List<Product> products;

    // Getters and Setters
}

@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @ManyToOne
    @JoinColumn(name = "category_id", referencedColumnName = "id")
    private Category category;

    // Getters and Setters
}

বুঝিয়ে বলি:

  • @OneToMany: একটি ক্যাটাগরিতে একাধিক পণ্য সম্পর্কিত।
  • mappedBy: Product টেবিলের category ফিল্ডের মাধ্যমে সম্পর্কটি সংজ্ঞায়িত করে।
  • @ManyToOne: Product টেবিল থেকে Category টেবিলের সাথে সম্পর্ক স্থাপন করে।

Many-to-Many Mapping

একটি টেবিলের একাধিক রেকর্ড অন্য একটি টেবিলের একাধিক রেকর্ডের সাথে সম্পর্কিত থাকে।
উদাহরণ: একজন ছাত্র একাধিক কোর্স নিতে পারে এবং একটি কোর্সে একাধিক ছাত্র থাকতে পারে।

@ManyToMany অ্যানোটেশন ব্যবহারের ধাপ:

Entity ক্লাস উদাহরণ:

import jakarta.persistence.*;
import java.util.List;

@Entity
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @ManyToMany
    @JoinTable(
        name = "student_course",
        joinColumns = @JoinColumn(name = "student_id"),
        inverseJoinColumns = @JoinColumn(name = "course_id")
    )
    private List<Course> courses;

    // Getters and Setters
}

@Entity
public class Course {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String title;

    @ManyToMany(mappedBy = "courses")
    private List<Student> students;

    // Getters and Setters
}

বুঝিয়ে বলি:

  • @ManyToMany: Student এবং Course টেবিলের মধ্যে একাধিক থেকে একাধিক সম্পর্ক স্থাপন করে।
  • @JoinTable: একটি মধ্যবর্তী টেবিল (student_course) তৈরি করে, যেখানে student_id এবং course_id সংরক্ষিত থাকে।
  • inverseJoinColumns: বিপরীত সম্পর্কের কলাম সংজ্ঞায়িত করে।

Cascade এবং Fetch টাইপ

  • Cascade: ডেটা সঞ্চালনের সময় সম্পর্কিত টেবিলের উপর স্বয়ংক্রিয় অপারেশন করে। উদাহরণ: CascadeType.ALL, CascadeType.PERSIST, CascadeType.REMOVE
  • Fetch Type: ডেটা লোড করার সময় সম্পর্কিত ডেটা কীভাবে ফেচ করা হবে তা নির্ধারণ করে। উদাহরণ: FetchType.LAZY (ডেটা প্রয়োজন হলে লোড হবে), FetchType.EAGER (প্রথমে সব ডেটা লোড হবে)।

উদাহরণ:

@OneToMany(mappedBy = "category", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Product> products;

সারাংশ

স্প্রিং বুট ORM-এ @OneToOne, @OneToMany, এবং @ManyToMany অ্যানোটেশন ব্যবহার করে ডেটাবেস সম্পর্ক সহজে সংজ্ঞায়িত করা যায়। এই সম্পর্কগুলো ব্যবহারের মাধ্যমে ডেটাবেস অপারেশন যেমন টেবিল ম্যাপিং, ডেটা রিলেশন, এবং CRUD অপারেশন খুবই কার্যকরী ও সহজ হয়।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...